package ar.edu.uade.fain.ad.test.server.entity;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name = "CONTRATOS")
@NamedQueries({
	@NamedQuery(name = "contrato.desarrolladorMayorConvenio", query = 
			"	SELECT c " +
			"	FROM Contrato c" +
			"	JOIN c.integrante i" +
			"	WHERE (c.convenio.valorHora * c.convenio.horas) = (" +
			"			SELECT MAX(c1.convenio.valorHora * c1.convenio.horas) " +
			"			FROM Contrato c1 " +
			"			JOIN c1.integrante i1 " +
			"			WHERE i1.class = Desarrollador" +
			"	) AND i.class = Desarrollador")
})
public class Contrato extends PersistentObject {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Column
	@Temporal(TemporalType.DATE)
	private Date fecha;

	@ManyToOne
	@JoinColumn(name = "idProyecto")
	private Proyecto proyecto;

	@ManyToOne
	@JoinColumn(name = "idIntegrante")
	private Integrante integrante;

	@Embedded
	private Convenio convenio;

	public Contrato() {
		super();
	}

	public Date getFecha() {
		return fecha;
	}

	public void setFecha(Date fecha) {
		this.fecha = fecha;
	}

	public Proyecto getProyecto() {
		return proyecto;
	}

	public void setProyecto(Proyecto proyecto) {
		this.proyecto = proyecto;
	}

	public Integrante getIntegrante() {
		return integrante;
	}

	public void setIntegrante(Integrante integrante) {
		this.integrante = integrante;
	}

	public Convenio getConvenio() {
		return convenio;
	}

	public void setConvenio(Convenio convenio) {
		this.convenio = convenio;
	}

	@Override
	public String toString() {
		return "Contrato [fecha=" + fecha + ", proyecto=" + proyecto
				+ ", integrante=" + integrante + ", convenio=" + convenio
				+ ", getId()=" + getId() + "]";
	}

}
